iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 5
0

今天來說一下表格,表格在資料呈現當中,也是滿常用的,可以列表,由上到下,清楚的讓使用者了解內容。

先弄一下簡單的表格 弄一個 4 X 4 的表格

程式說明
TableStyle() 有一些屬性可以設定,這邊挑幾個來說,詳細可以看官方說明文件
ALIGN: 對齊方式
FONTNAME:字體
FONTSIZE:字體大小
VALIGN:上下對齊方式
GRID:框線
TEXTCOLOR:文字顏色
BACKGROUND:背景顏色

參數說明:
第一個: 'ALIGN' 對齊方式
第二個: (0, 0) 套用範圍-開始座標(列, 行),左上角為(0, 0 )
第三個: (-1, -1) 套用範圍-結束座標(列,行), (-1,-1) 為最後一個
第四個: 值
所以 (0, 0) 到 (-1, -1) 就是全部套用,(是由0開始數)

('ALIGN', (0, 0), (-1, -1), 'CENTER'), # 置中對齊

基本上都類似這些參數,但有些屬性會多一兩個參數,可以看原始碼知道。

from reportlab.lib import colors
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.platypus import SimpleDocTemplate, TableStyle, Table

pdfmetrics.registerFont(TTFont('kaiu', "font/kaiu.ttf"))
fileName = "example.pdf"
pdfTemplate = SimpleDocTemplate(fileName)
story = []

tableStyle = TableStyle([
    ('ALIGN', (0, 0), (-1, -1), 'CENTER'), # 置中對齊
    ('FONTNAME', (0, 0), (-1, -1), 'kaiu'), # 字體
    ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'), # 上下置中
    ('GRID', (0, 0), (-1, -1), 0.5, colors.black), # 框線黑色,寬度0.5
])

dataList = [
    ["1", "2", "3", "4"],
    ["5", "6", "7", "8"],
    ["9", "10", "11", "12"],
    ["13", "14", "15", "16"],
]
table = Table(dataList, style=tableStyle)
story.append(table)
pdfTemplate.build(story)

輸出結果,就會看到 一個 4*4 的表格

加點變化吧,設定第一橫排、第一直列背景顏色,淺藍色
第三排第三個 文字顏色改為紅色

完整程式碼

from reportlab.lib import colors
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.platypus import SimpleDocTemplate, TableStyle, Table

pdfmetrics.registerFont(TTFont('kaiu', "font/kaiu.ttf"))
fileName = "example.pdf"
pdfTemplate = SimpleDocTemplate(fileName)
story = []

tableStyle = TableStyle([
    ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
    ('FONTNAME', (0, 0), (-1, -1), 'kaiu'),
    ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
    ('GRID', (0, 0), (-1, -1), 0.5, colors.black),
    ('BACKGROUND', (0, 0), (0, -1), colors.lightblue),
    ('BACKGROUND', (0, 0), (-1, 0), colors.lightblue),
    ('TEXTCOLOR', (2, 2), (2, 2), colors.red),
])

dataList = [
    ["1", "2", "3", "4"],
    ["5", "6", "7", "8"],
    ["9", "10", "11", "12"],
    ["13", "14", "15", "16"],
]
table = Table(dataList, style=tableStyle)
story.append(table)
pdfTemplate.build(story)

輸出結果

可以客製化呈現的樣式,可以多試試其他的屬性。


參考資料:

如果有任何寫得不好的地方,請跟我說,謝謝。


上一篇
[Day 04] 樣式(Style)
下一篇
[Day 06] 長條圖(Bar Chart)
系列文
用 Python 玩 PDF,結合Django 變成一個網頁系統30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言